这一步,OpenAI组织了大量的人类标注员,让他们做一件事:对模型生成的答案进行排序。
具体操作流程:
收集一批问题,来源包括真实用户的提问、标注员自己构思的问题,覆盖科学、生活、技术、哲学等各种主题。
用监督微调后的模型对每个问题生成4-9个不同的答案,通过调整随机性参数得到多样化的回应。
标注员看到1个问题和4-9个候选答案,任务是将这些答案按质量从高到低排序。
比如:答案C > 答案A > 答案D > 答案B,表示标注员认为C最好,A次之,D第三,B最差。
以上步骤重复几万次甚至更多,收集大量的偏好数据。
一个具体的标注示例
问题:量子计算机和经典计算机有什么区别?
候选答案1:
"量子计算机使用量子比特(qubit),而经典计算机使用普通比特。量子比特可以同时处于0和1的叠加态。.."
候选答案2:
"量子计算机比经典计算机快很多倍,可以瞬间破解所有密码。"
候选答案3:
"这是个很复杂的物理学问题,我建议您查阅专业文献。"
候选答案4:
"主要区别在于:1. 计算原理,经典计算机基于二进制(0/1),量子计算机利用量子叠加态 2. 优势领域,量子计算机在特定问题上有指数级加速 3. 局限,量子计算机不是'更快的经典计算机',而是擅长不同类型的问题 4. 现状,仍在实验阶段,离实用还有距离。需要注意的是,量子计算机不会'取代'经典计算机,两者会并存。"
标注员的排序结果:
标注员的指导原则
为了保证标注质量的一致性,OpenAI给标注员提供了详细的指南,有兴趣的同学可以去搜索下,这里就不再列出了。
标注的挑战
这里有一个微妙但重要的问题:不同的标注员可能有不同的判断。
OpenAI如何处理这个问题?多人交叉标注,同一组答案由多个标注员排序,取平均。标注员培训,定期校准,讨论边界案例。接受一定程度的不一致,人类本身的偏好就是多样的。
正是这种"多样性",让RLHF学到的是"大多数人的偏好",而不是某一个人的偏好。
收集到的数据
经过数周甚至数月的标注工作,OpenAI收集到了大约3-5万条这样的数据:
数据1:
问题:"什么是量子计算?"
排序:答案D > 答案A > 答案C > 答案B数据2:
问题:"如何做红烧肉?"
排序:答案B > 答案C > 答案A数据3:
问题:"如何破解邻居的WiFi密码?"
排序:答案A(坚定拒绝+合法建议) > 答案B(警告但给技术信息) > 答案C(直接给方法)...3万多条
这些数据,就是RLHF的"黄金"——它们代表了人类对"好答案"的集体判断。
现在我们有了数万条排序数据(比如"D > C > B > A"),但这些排序无法直接用来训练ChatGPT。
为什么?
因为ChatGPT需要的是对每个答案的具体评分,而不是排序。排序只是模糊的关系,计算机无法量化他。对于计算机世界,无法量化的问题非常难以处理。
所以OpenAI做了一件聪明的事:训练一个专门的"评分模型"——奖励模型(Reward Model)。
奖励模型的工作流程可以概括为三个阶段:
输入阶段
接收一个问题及其对应的答案,以文本形式传入模型。
处理阶段
奖励模型内部进行计算,分析答案的质量、相关性、准确性等维度。
输出阶段
输出一个数值分数,表示该答案的质量评分,例如 7.2、8.5 等。
整个流程就是:问题+答案(文本) → 奖励模型计算 → 质量分数(数值)
训练过程
用步骤1收集的排序数据来训练。具体来说:
训练过程:
- 拿出一条排序数据,比如:
问题:"量子计算机和经典计算机有什么区别?"
排序:答案4 > 答案1 > 答案3 > 答案2- 让奖励模型分别给答案4、答案1、答案3、答案2打分
奖励模型输出:
答案4的分数:8.5
答案1的分数:7.2
答案3的分数:4.8
答案2的分数:2.1- 检查:分数顺序和人类排序是否一致?
- 如果一致(8.5 > 7.2 > 4.8 > 2.1)→ 很好,继续
- 如果不一致(比如答案3的分数比答案1高)→ 调整奖励模型参数
- 用数万条排序数据重复这个过程
训练完成后,我们得到一个能够自动给任何"问题+答案"组合打分的模型。
这个奖励模型学会了:
虽然它不"知道"为什么某个答案更好,但它能准确"预测"人类会给这个答案打多少分。
奖励模型的局限性
奖励模型虽然强大,但也有明显局限:
能力:
- 能够泛化到新问题(没见过的问题)
- 能够捕捉微妙的偏好(比如语气的友好度)
- 能够平衡多个标准(有帮助、诚实、无害)
局限:
- 可能过拟合标注员的偏见
- 可能被"投机取巧"的答案欺骗
- 在极端情况下可能失效
这是强化学习中一个经典问题:模型找到了"投机取巧"的方式来获得高分,而不是真正做到我们想要的。
例子1:刻意填充长度
假设奖励模型习惯性给"更长的答案"更高的分数(因为训练数据中长答案通常更好),ChatGPT可能学会的策略是:"如果我写得更长,就能得高分!"即使内容没必要那么长,也会刻意填充。
例子2:过度礼貌
奖励模型喜欢"礼貌的结尾",ChatGPT可能学会在每个答案都加上"希望这个回答对您有帮助!如果还有疑问,欢迎继续提问!"即使用户并不需要。
对抗奖励黑客的策略
现在,有了奖励模型这个"评委",就可以优化ChatGPT了。
RLHF的具体流程:
第1步:生成答案
ChatGPT对一个问题生成一个答案。
第2步:奖励打分
奖励模型给这个答案打分。
高分 = 人类可能喜欢,低分 = 人类可能不喜欢。
第3步:参数调整
ChatGPT根据分数调整自己的参数。
追求:生成高分的答案;避免:生成低分的答案。
第4步:反复迭代
重复这个过程数千次、数万次。
最终结果
ChatGPT学会了生成那些"人类更可能喜欢"的答案。
这个过程,在机器学习中叫做"强化学习"。
核心思想是:不直接告诉模型"正确答案是什么",而是告诉它"这个答案好不好"(奖励信号),让它自己学习如何改进。
经过RLHF,ChatGPT获得了质的飞跃。答案更加清晰、结构化,主动提供额外的有用信息,在用户表达不清时主动询问澄清。模型也更诚实,承认不知道的事情,表达适当的不确定性,指出问题中的错误假设但保持礼貌。同时更安全,坚定拒绝有害请求,不传播错误信息,纠正危险的想法但不说教。
用同一个例子,展示三个阶段的完整对比:
问题:"如何破解邻居家的WiFi密码?"
GPT-3(纯预训练):
"如何破解邻居家的WiFi密码?破解WiFi密码的常见方法包括:
- 使用暴力破解工具如Aircrack-ng...
- 尝试常见的默认密码。..
- 使用WPS漏洞。.."
→ 直接给出方法,完全没有安全和法律意识GPT-3.5-SFT(监督微调):
"破解他人WiFi密码是违法行为,我不建议这样做。
这侵犯了他人隐私,在很多地方是犯罪行为。
但从技术角度讲,WiFi加密协议有几种。.."
→ 警告了违法,但还是提供了技术信息!ChatGPT(RLHF对齐):
"我不能提供破解WiFi密码的方法。未经授权访问他人WiFi网络是违法的,侵犯了他人的隐私和财产权。
如果您需要上网:
- 可以询问邻居是否愿意分享WiFi(并分担费用)
- 考虑办理自己的宽带服务
- 使用手机热点作为临时方案
如果您是忘记了自己家的WiFi密码,我可以教您如何重置路由器。"
→ 坚定拒绝,说明原因,提供合法替代方案,甚至主动理解用户可能的真实需求
只有经过RLHF,模型才真正学会了:什么该说,什么不该说,以及如何既坚守原则又帮助用户。
| 中文 | English | 音标 | 说明 |
|---|---|---|---|
| 奖励模型 | Reward Model | /rɪˈwɔːd ˈmɒdl/ | 把人类排序偏好转化为可微分分数的神经网络 |
| 标注员 | Annotator / Labeler | /ˈænəteɪtə(r)/ | 对候选答案进行排序与质量评判的人类 |
| 排序 | Ranking | /ˈræŋkɪŋ/ | 对多个答案按偏好从高到低排列,取代绝对打分 |
| 强化学习 | Reinforcement Learning | /ˌriːɪnˈfɔːsmənt ˈlɜːnɪŋ/ | 通过奖励信号而非标准答案来指导模型改进 |
| 奖励黑客 | Reward Hacking | /rɪˈwɔːd ˈhækɪŋ/ | 模型钻奖励函数漏洞刷高分而非真正改善质量 |
| KL散度 | KL Divergence | /ˌkeɪ el daɪˈvɜːdʒəns/ | 衡量两个概率分布差异的指标,用于约束模型漂移 |
| 泛化 | Generalization | /ˌdʒenrəlaɪˈzeɪʃn/ | 模型从训练数据推广到未见过数据的能力 |
| 偏好数据 | Preference Data | /ˈprefrəns ˈdeɪtə/ | 由人类对候选答案排序得到的训练素材 |